Global parameters for modeling

Loading required package: MASS
Loading required package: ggplot2
Loading required package: gtools
Loading required package: pheatmap
Loading required package: cowplot

Attaching package: ‘cowplot’

The following object is masked from ‘package:ggplot2’:

    ggsave

Loading required package: dplyr

Attaching package: ‘dplyr’

The following object is masked from ‘package:MASS’:

    select

The following object is masked from ‘package:matrixStats’:

    count

The following objects are masked from ‘package:GenomicRanges’:

    intersect, setdiff, union

The following object is masked from ‘package:GenomeInfoDb’:

    intersect

The following objects are masked from ‘package:IRanges’:

    collapse, desc, intersect, setdiff, slice, union

The following objects are masked from ‘package:S4Vectors’:

    first, intersect, rename, setdiff, setequal, union

The following object is masked from ‘package:Biobase’:

    combine

The following objects are masked from ‘package:BiocGenerics’:

    combine, intersect, setdiff, union

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union

Loading required package: tidyr

Attaching package: ‘tidyr’

The following object is masked from ‘package:S4Vectors’:

    expand

Loading required package: ggrepel
R version 3.5.2 (2018-12-20)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.3

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats4    parallel  stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] ggrepel_0.8.0               tidyr_0.8.3                 dplyr_0.8.0.1               cowplot_0.9.4              
 [5] pheatmap_1.0.12             gtools_3.8.1                ggplot2_3.1.1               MASS_7.3-51.4              
 [9] DESeq2_1.22.2               SummarizedExperiment_1.12.0 DelayedArray_0.8.0          BiocParallel_1.16.6        
[13] matrixStats_0.54.0          GenomicRanges_1.34.0        GenomeInfoDb_1.18.2         IRanges_2.16.0             
[17] S4Vectors_0.20.1            vsn_3.50.0                  Biobase_2.42.0              BiocGenerics_0.28.0        
[21] lattice_0.20-38             gplots_3.0.1.1              RColorBrewer_1.1-2          edgeR_3.24.3               
[25] limma_3.38.3               

loaded via a namespace (and not attached):
 [1] bitops_1.0-6           bit64_0.9-7            tools_3.5.2            backports_1.1.4       
 [5] R6_2.4.0               affyio_1.52.0          rpart_4.1-13           KernSmooth_2.23-15    
 [9] Hmisc_4.2-0            DBI_1.0.0              lazyeval_0.2.2         colorspace_1.4-1      
[13] nnet_7.3-12            withr_2.1.2            tidyselect_0.2.5       gridExtra_2.3         
[17] bit_1.1-14             compiler_3.5.2         preprocessCore_1.44.0  htmlTable_1.13.1      
[21] caTools_1.17.1.2       scales_1.0.0           checkmate_1.9.1        genefilter_1.64.0     
[25] affy_1.60.0            stringr_1.4.0          digest_0.6.18          foreign_0.8-71        
[29] rmarkdown_1.12         XVector_0.22.0         base64enc_0.1-3        pkgconfig_2.0.2       
[33] htmltools_0.3.6        htmlwidgets_1.3        rlang_0.3.4            rstudioapi_0.10       
[37] RSQLite_2.1.1          jsonlite_1.6           acepack_1.4.1          RCurl_1.95-4.12       
[41] magrittr_1.5           GenomeInfoDbData_1.2.0 Formula_1.2-3          Matrix_1.2-17         
[45] Rcpp_1.0.1             munsell_0.5.0          stringi_1.4.3          yaml_2.2.0            
[49] zlibbioc_1.28.0        plyr_1.8.4             grid_3.5.2             blob_1.1.1            
[53] gdata_2.18.0           crayon_1.3.4           splines_3.5.2          annotate_1.60.1       
[57] locfit_1.5-9.1         knitr_1.22             pillar_1.3.1           geneplotter_1.60.0    
[61] XML_3.98-1.19          glue_1.3.1             evaluate_0.13          latticeExtra_0.6-28   
[65] data.table_1.12.2      BiocManager_1.30.4     gtable_0.3.0           purrr_0.3.2           
[69] assertthat_0.2.1       xfun_0.6               xtable_1.8-3           rsconnect_0.8.13      
[73] survival_2.44-1.1      tibble_2.1.1           AnnotationDbi_1.44.0   memoise_1.1.0         
[77] cluster_2.0.8          statmod_1.4.30        

Number of raw counts, samples

 [1] "physiologyFW"                            "physiologyM"                            
 [3] "condition15_ppt"                         "cladeClade2"                            
 [5] "cladeClade3"                             "physiologyM:condition15_ppt"            
 [7] "physiologyM:cladeClade2"                 "physiologyM:cladeClade3"                
 [9] "condition15_ppt:cladeClade2"             "condition15_ppt:cladeClade3"            
[11] "physiologyM:condition15_ppt:cladeClade2" "physiologyM:condition15_ppt:cladeClade3"
[1] 12
attr(,"method")
[1] "tolNorm2"
attr(,"useGrad")
[1] FALSE
attr(,"tol")
[1] 1.798561e-14
[1] 81 12
[1] 0.751381

Exploratory Plots

Heatmaps

Individuals clustered by overall expression

Individuals by Top 100 genes heatmap

Individuals clustered by top 100 gene expression

PCA for overall expression

LS0tCnRpdGxlOiAiREVhbmFseXNpc19rZmlzaF9vc21vdGljIgphdXRob3I6ICJMaXNhIEpvaG5zb24iCmRhdGU6ICdgciBTeXMuRGF0ZSgpYCcKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGNvbGxhcHNlZDogbm8KICAgIGRmX3ByaW50OiBwYWdlZAogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRoZW1lOiBjZXJ1bGVhbgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNQogICAgdG9jX2Zsb2F0OiB5ZXMKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNQotLS0KCmBgYHtyIEdsb2JhbFZhcmlhYmxlc30KCiNTZXR0aW5nIGEgcmVhc29uYWJsZSBwLXZhbHVlIHRocmVzaG9sZCB0byBiZSB1c2VkIHRocm91Z2hvdXQKCnBfY3V0b2ZmIDwtIDAuMDUKCnBfY3V0b2ZmX25ldyA8LSAwLjA1Cgprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkKCkZDX2N1dG9mZl9vcmlnaW5hbCA8LSAwCgpGQ19jdXRvZmZfbmV3IDwtIDEKCmBgYAoKCiNHbG9iYWwgcGFyYW1ldGVycyBmb3IgbW9kZWxpbmcKCgoKYGBge3IgTG9hZFBhY2thZ2VzfQoKIyBJbnN0YWxsIGZ1bmN0aW9uIGZvciBwYWNrYWdlcyAgICAKcGFja2FnZXM8LWZ1bmN0aW9uKHgpewogIHg8LWFzLmNoYXJhY3RlcihtYXRjaC5jYWxsKClbWzJdXSkKICBpZiAoIXJlcXVpcmUoeCxjaGFyYWN0ZXIub25seT1UUlVFKSl7CiAgICBpbnN0YWxsLnBhY2thZ2VzKHBrZ3M9eCxyZXBvcz0iaHR0cDovL2NyYW4uci1wcm9qZWN0Lm9yZyIpCiAgICByZXF1aXJlKHgsY2hhcmFjdGVyLm9ubHk9VFJVRSkKICB9Cn0KCmJpb2NvbmR1Y3RvcnMgPC0gZnVuY3Rpb24oeCl7CiAgICB4PC0gYXMuY2hhcmFjdGVyKG1hdGNoLmNhbGwoKVtbMl1dKQogICAgaWYgKCFyZXF1aXJlKHgsIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkpewogICAgICBzb3VyY2UoImh0dHBzOi8vYmlvY29uZHVjdG9yLm9yZy9iaW9jTGl0ZS5SIikKICAgICAgYmlvY0xpdGUocGtncz14KQogICAgICByZXF1aXJlKHgsIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkKICAgIH0KfQoKcGFja2FnZXMoTUFTUykKcGFja2FnZXMoZ2dwbG90MikKcGFja2FnZXMoZ3Rvb2xzKQpwYWNrYWdlcyhwaGVhdG1hcCkKcGFja2FnZXMoY293cGxvdCkKcGFja2FnZXMoUkNvbG9yQnJld2VyKQpwYWNrYWdlcyhkcGx5cikKcGFja2FnZXModGlkeXIpCnBhY2thZ2VzKGdncmVwZWwpCmJpb2NvbmR1Y3RvcnMoREVTZXEyKQpiaW9jb25kdWN0b3JzKGxpbW1hKQpiaW9jb25kdWN0b3JzKCdlZGdlUicpCnBhY2thZ2VzKGdwbG90cykKcGFja2FnZXMobGF0dGljZSkKcGFja2FnZXMoInZzbiIpCgpzZXNzaW9uSW5mbygpCgpgYGAKCgpgYGB7ciBsb2FkZmlsZXMsIHJlc3VsdHM9J2hpZGUnLCBpbmNsdWRlPUZBTFNFfQoKIyBUaGlzIGlzIHRoZSBjb3VudHMgd2l0aCBFeHBlcmltZW50YWwgRGVzaWduIEluZm8gaW4gdGhlIGxhc3QgNSByb3dzCnNldHdkKCJ+L0RvY3VtZW50cy9VQ0RhdmlzL1doaXRlaGVhZC9STkFzZXFfMTVraWxsaWZpc2gvREVfc2NyaXB0cy9saW1tYSIpCiNpZighZmlsZS5leGlzdHMoJy4uLy4uLy4uLy4uL0Vuc2VtYmxfc3BlY2llc19jb3VudHNfZGVzaWduZmFjdG9ycy5jc3YnKSl7CiMgIGRvd25sb2FkLmZpbGUoImh0dHBzOi8vb3NmLmlvLzd2cDM4L2Rvd25sb2FkIiwnRW5zZW1ibF9zcGVjaWVzX2NvdW50c19kZXNpZ25mYWN0b3JzLmNzdicpCiN9Cgpjb3VudHNfZGVzaWduIDwtIHJlYWQuY3N2KCJ+L0RvY3VtZW50cy9VQ0RhdmlzL1doaXRlaGVhZC9FbnNlbWJsX3NwZWNpZXNfY291bnRzX2Rlc2lnbmZhY3RvcnMuY3N2IixzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCgpgYGAKCk51bWJlciBvZiByYXcgY291bnRzLCBzYW1wbGVzCmBgYHtyIGRlc2lnbmluZm8scmVzdWx0cz0nc2hvdyd9CgpkaW0oY291bnRzX2Rlc2lnbikKI1sxXSAzMDQ3MSAgIDEzMAoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZvcm1hdCBkZXNpZ24gYW5kIGNvdW50cyBtYXRyaXgKIyBEcm9wIGNvbHVtbnMgd2l0aCBubyBkYXRhCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmRlc2lnbiA8LSBjb3VudHNfZGVzaWduW2NvdW50c19kZXNpZ24kRW5zZW1ibCA9PSAnRW1wdHknLF0KI2Rlc2lnbiR0eXBlIDwtIGMoInNwZWNpZXMiLCJuYXRpdmVfc2FsaW5pdHkiLCJjbGFkZSIsImdyb3VwIiwiY29uZGl0aW9uIikKZHJvcHMgPC0gYygiWCIsIkVuc2VtYmwiLAogICAgICAgICAgICJGX3plYnJpbnVzX0JXXzEucXVhbnQiLCJGX3plYnJpbnVzX0JXXzIucXVhbnQiLAogICAgICAgICAgICJGX3plYnJpbnVzX0ZXXzEucXVhbnQiLCJGX3plYnJpbnVzX0ZXXzIucXVhbnQiLAogICAgICAgICAgICJGX25vdHRpX0ZXXzEucXVhbnQiLCJGX25vdHRpX0ZXXzIucXVhbnQiLAogICAgICAgICAgICJGX3NjaWFkaWN1c19CV18xLnF1YW50IiwiRl9zY2lhZGljdXNfRldfMS5xdWFudCIsIkZfc2NpYWRpY3VzX0ZXXzIucXVhbnQiKQp0cmFuc2Zlcl9kcm9wcyA8LSBjKCJGX3NjaWFkaWN1c190cmFuc2Zlcl8xLnF1YW50IiwiRl9yYXRoYnVuaV90cmFuc2Zlcl8xLnF1YW50IiwiRl9yYXRoYnVuaV90cmFuc2Zlcl8yLnF1YW50IiwiRl9yYXRoYnVuaV90cmFuc2Zlcl8zLnF1YW50IiwKICAgICAgICAgICAgICAgICAgICAiRl9ncmFuZGlzX3RyYW5zZmVyXzEucXVhbnQiLCJGX2dyYW5kaXNfdHJhbnNmZXJfMi5xdWFudCIsIkZfZ3JhbmRpc190cmFuc2Zlcl8zLnF1YW50IiwKICAgICAgICAgICAgICAgICAgICAiRl9ub3RhdHVzX3RyYW5zZmVyXzEucXVhbnQiLCJGX25vdGF0dXNfdHJhbnNmZXJfMi5xdWFudCIsIkZfbm90YXR1c190cmFuc2Zlcl8zLnF1YW50IiwKICAgICAgICAgICAgICAgICAgICAiRl9wYXJ2YXBpbmlzX3RyYW5zZmVyXzEucXVhbnQiLCJGX3BhcnZhcGluaXNfdHJhbnNmZXJfMi5xdWFudCIsCiAgICAgICAgICAgICAgICAgICAgIkxfZ29vZGVpX3RyYW5zZmVyXzEucXVhbnQiLCJMX2dvb2RlaV90cmFuc2Zlcl8yLnF1YW50IiwiTF9nb29kZWlfdHJhbnNmZXJfMy5xdWFudCIsCiAgICAgICAgICAgICAgICAgICAgIkZfb2xpdmFjZW91c190cmFuc2Zlcl8xLnF1YW50IiwiRl9vbGl2YWNlb3VzX3RyYW5zZmVyXzIucXVhbnQiLAogICAgICAgICAgICAgICAgICAgICJMX3BhcnZhX3RyYW5zZmVyXzEucXVhbnQiLCJMX3BhcnZhX3RyYW5zZmVyXzIucXVhbnQiLCJMX3BhcnZhX3RyYW5zZmVyXzMucXVhbnQiLAogICAgICAgICAgICAgICAgICAgICJGX2hldGVyb2NsaXR1c01EUFBfdHJhbnNmZXJfMS5xdWFudCIsIkZfaGV0ZXJvY2xpdHVzTURQUF90cmFuc2Zlcl8yLnF1YW50IiwiRl9oZXRlcm9jbGl0dXNNRFBQX3RyYW5zZmVyXzMucXVhbnQiLAogICAgICAgICAgICAgICAgICAgICJGX3NpbWlsaXNfdHJhbnNmZXJfMS5xdWFudCIsIkZfc2ltaWxpc190cmFuc2Zlcl8yLnF1YW50IiwiRl9zaW1pbGlzX3RyYW5zZmVyXzMucXVhbnQiLAogICAgICAgICAgICAgICAgICAgICJGX2RpYXBoYW51c190cmFuc2Zlcl8xLnF1YW50IiwiRl9kaWFwaGFudXNfdHJhbnNmZXJfMi5xdWFudCIsCiAgICAgICAgICAgICAgICAgICAgIkZfY2hyeXNvdHVzX3RyYW5zZmVyXzEucXVhbnQiLCJGX2Nocnlzb3R1c190cmFuc2Zlcl8yLnF1YW50IiwKICAgICAgICAgICAgICAgICAgICAiQV94ZW5pY2FfdHJhbnNmZXJfMS5xdWFudCIsIkFfeGVuaWNhX3RyYW5zZmVyXzIucXVhbnQiLCJBX3hlbmljYV90cmFuc2Zlcl8zLnF1YW50IiAsCiAgICAgICAgICAgICAgICAgICAgIkZfY2F0YW5hdHVzX3RyYW5zZmVyXzEucXVhbnQiLCJGX2NhdGFuYXR1c190cmFuc2Zlcl8yLnF1YW50IiwKICAgICAgICAgICAgICAgICAgICAiRl9oZXRlcm9jbGl0dXNNRFBMX3RyYW5zZmVyXzEucXVhbnQiLCJGX2hldGVyb2NsaXR1c01EUExfdHJhbnNmZXJfMi5xdWFudCIsIkZfaGV0ZXJvY2xpdHVzTURQTF90cmFuc2Zlcl8zLnF1YW50IikKY291bnRzPC1jb3VudHNfZGVzaWduWyFjb3VudHNfZGVzaWduJEVuc2VtYmwgPT0gJ0VtcHR5JyxdCnJvd25hbWVzKGNvdW50cyk8LWNvdW50cyRFbnNlbWJsCmRlc2lnbiA8LSBkZXNpZ25bICwgIShuYW1lcyhkZXNpZ24pICVpbiUgZHJvcHMpXQpjb3VudHMgPC0gY291bnRzWyAsICEobmFtZXMoY291bnRzKSAlaW4lIGRyb3BzKV0KZGVzaWduIDwtIGRlc2lnblsgLCAhKG5hbWVzKGRlc2lnbikgJWluJSB0cmFuc2Zlcl9kcm9wcyldCmNvdW50cyA8LSBjb3VudHNbICwgIShuYW1lcyhjb3VudHMpICVpbiUgdHJhbnNmZXJfZHJvcHMpXQpkaW0oZGVzaWduKQojWzFdICA1IDgxCmRpbShjb3VudHMpCmdlbmUubmFtZXM8LXJvd25hbWVzKGNvdW50cykKCmRlc2lnbltdIDwtIGxhcHBseSggZGVzaWduLCBmYWN0b3IpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgZGVzaWduIGNhdGVvZ29yaWVzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnNwZWNpZXM8LWFzLmNoYXJhY3Rlcih1bmxpc3QoZGVzaWduWzEsXSkpCnBoeXNpb2xvZ3k8LWFzLmNoYXJhY3Rlcih1bmxpc3QoZGVzaWduWzIsXSkpCmNsYWRlPC1hcy5jaGFyYWN0ZXIodW5saXN0KGRlc2lnblszLF0pKQpjb25kaXRpb248LWFzLmNoYXJhY3Rlcih1bmxpc3QoZGVzaWduWzUsXSkpCmNvbmRpdGlvbl9waHlzaW9sb2d5PC1hcy52ZWN0b3IocGFzdGUoY29uZGl0aW9uLHBoeXNpb2xvZ3ksc2VwPSIuIikpCmNvbmRpdGlvbl9waHlzaW9sb2d5X2NsYWRlIDwtIGFzLnZlY3RvcihwYXN0ZShjb25kaXRpb25fcGh5c2lvbG9neSxjbGFkZSxzZXA9Ii4iKSkKY29uZGl0aW9uX3BoeXNpb2xvZ3lfY2xhZGUgPC0gYXMudmVjdG9yKHBhc3RlKCJncm91cCIsY29uZGl0aW9uX3BoeXNpb2xvZ3lfY2xhZGUsc2VwPSIiKSkKY29sczwtY29sbmFtZXMoY291bnRzKQpFeHBEZXNpZ24gPC0gZGF0YS5mcmFtZShyb3cubmFtZXM9Y29scywKICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uPWNvbmRpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2lvbG9neSA9IHBoeXNpb2xvZ3ksCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYWRlID0gY2xhZGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZXMgPSBzcGVjaWVzLAogICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGU9Y29scykKRXhwRGVzaWduCmRlc2lnbiA9IG1vZGVsLm1hdHJpeCggfjAgKyBwaHlzaW9sb2d5KmNvbmRpdGlvbipjbGFkZSwgRXhwRGVzaWduKQpjb2xuYW1lcyhkZXNpZ24pCiMgY2hlY2sgcmFuayBvZiBtYXRyaXgKTWF0cml4OjpyYW5rTWF0cml4KCBkZXNpZ24gKQpkaW0oZGVzaWduKQpgYGAKCgpgYGB7ciBub3JtLCByZXN1bHRzPSJzaG93IiwgZmlnLndpZHRoPTExLCBmaWcucGF0aD0nZmlndXJlcy8nLCBkZXY9YygncG5nJywgJ3BkZicpfQojIC0tLS0tLS0tLS0tLS0tLQoKIyBERSBhbmFseXNpcwoKIyAtLS0tLS0tLS0tLS0tLS0KZ2VuZS5uYW1lczwtcm93bmFtZXMoY291bnRzKQpjb3VudHM8LWFzLm1hdHJpeChhcy5kYXRhLmZyYW1lKHNhcHBseShjb3VudHMsIGFzLm51bWVyaWMpKSkKcm93bmFtZXMoY291bnRzKTwtZ2VuZS5uYW1lcwpjbGFzcyhjb3VudHMpCgprZWVwPC1maWx0ZXJCeUV4cHIoY291bnRzLGRlc2lnbiA9IGRlc2lnbixncm91cD1jb25kaXRpb25fcGh5c2lvbG9neSxtaW4uY291bnQgPSAxMCwgbWluLnRvdGFsLmNvdW50ID0gMTAwKQpjb3VudHMuZmlsdCA8LSBjb3VudHNba2VlcCxdCmRpbShjb3VudHMuZmlsdCkKI3dyaXRlLmNzdihjb3VudHMuZmlsdCwiLi4vLi4vLi4vMjFrX2NvdW50c19maWx0XzMwQXByaWwyMDE5LmNzdiIpCgpnZW5lcyA9IERHRUxpc3QoY291bnQgPSBjb3VudHMuZmlsdCwgZ3JvdXAgPSBjb25kaXRpb25fcGh5c2lvbG9neV9jbGFkZSkKI2dlbmVzID0gY2FsY05vcm1GYWN0b3JzKCBnZW5lcyApCgp2b2JqID0gdm9vbSggZ2VuZXMsIGRlc2lnbiwgcGxvdD1UUlVFKQpsY3BtIDwtIGNwbShnZW5lcyRjb3VudHMsIGxvZyA9IFRSVUUpCmJveHBsb3QobGNwbSwgbGFzID0gMiwgbWFpbiA9ICIiKQpwbG90KGNvbFN1bXModChsY3BtKSkpCgojcGNhID0gcHJjb21wKHQobGNwbSkpCiNuYW1lcyA9IGNvbG5hbWVzKGxjcG0pCiNmYWM9IGZhY3Rvcihjb25kaXRpb25fcGh5c2lvbG9neSkKI2NvbG91cnMgPSBjKCJyZWQiLCJibHVlIiwiZ3JlZW4iLCJvcmFuZ2UiKQojeHlwbG90KAojICBQQzIgfiBQQzEsIGdyb3Vwcz1mYWMsIGRhdGE9YXMuZGF0YS5mcmFtZShwY2EkeCksIHBjaD0xNiwgY2V4PTEuNSwKIyAgcGFuZWw9ZnVuY3Rpb24oeCwgeSwgLi4uKSB7CiMgICAgcGFuZWwueHlwbG90KHgsIHksIC4uLik7CiMgICAgbHRleHQoeD14LCB5PXksIGxhYmVscz1uYW1lcywgcG9zPTEsIG9mZnNldD0wLjgsIGNleD0xKQojICB9LAojICBhc3BlY3QgPSAiZmlsbCIsIGNvbD1jb2xvdXJzCiMgICNtYWluID0gZHJhdy5rZXkoa2V5ID0gbGlzdChyZWN0ID0gbGlzdChjb2wgPSBsaXN0KGNvbD1jb2xvdXJzKSwgdGV4dCA9IGxpc3QobGV2ZWxzKGZhYykpLCByZXAgPSBGQUxTRSkpKQojKQoKdnd0cyA8LSB2b29tV2l0aFF1YWxpdHlXZWlnaHRzKGdlbmVzLCBkZXNpZ249ZGVzaWduLCBub3JtYWxpemF0aW9uPSJxdWFudGlsZSIsIHBsb3Q9VFJVRSkKCmNvcmZpdCA8LSBkdXBsaWNhdGVDb3JyZWxhdGlvbih2b2JqLGRlc2lnbixibG9jaz1FeHBEZXNpZ24kc3BlY2llcykKCmNvcmZpdCRjb25zZW5zdXMKI1sxXSAwLjc1MTM4MQoKZml0UmFuIDwtIGxtRml0KHZvYmosZGVzaWduLGJsb2NrPUV4cERlc2lnbiRzcGVjaWVzLGNvcnJlbGF0aW9uPWNvcmZpdCRjb25zZW5zdXMpCmNvbG5hbWVzKGNvZWYoZml0UmFuKSkKCiMgWzFdICIoSW50ZXJjZXB0KSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaHlzaW9sb2d5TSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiMgWzNdICJjb25kaXRpb24xNV9wcHQiICAgICAgICAgICAgICAgICAgICAgICAgICJjbGFkZUNsYWRlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiMgWzVdICJjbGFkZUNsYWRlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaHlzaW9sb2d5TTpjb25kaXRpb24xNV9wcHQiICAgICAgICAgICAgCiMgWzddICJwaHlzaW9sb2d5TTpjbGFkZUNsYWRlMiIgICAgICAgICAgICAgICAgICJwaHlzaW9sb2d5TTpjbGFkZUNsYWRlMyIgICAgICAgICAgICAgICAgCiMgWzldICJjb25kaXRpb24xNV9wcHQ6Y2xhZGVDbGFkZTIiICAgICAgICAgICAgICJjb25kaXRpb24xNV9wcHQ6Y2xhZGVDbGFkZTMiICAgICAgICAgICAgCiMgWzExXSAicGh5c2lvbG9neU06Y29uZGl0aW9uMTVfcHB0OmNsYWRlQ2xhZGUyIiAicGh5c2lvbG9neU06Y29uZGl0aW9uMTVfcHB0OmNsYWRlQ2xhZGUzIgoKI2ZpdFJhbiA8LSBlQmF5ZXModG1wKQoKI3N0YXRzPC10b3BUYWJsZShmaXRSYW4sbnVtYmVyPTUwLHNvcnQuYnk9InAiKQojdG9wVGFibGUoZml0UmFuLG51bWJlcj01MCxzb3J0LmJ5PSJwIikKYGBgCgoKIyBFeHBsb3JhdG9yeSBQbG90cwoKCiMjIEhlYXRtYXBzCgoKIyMjIEluZGl2aWR1YWxzIGNsdXN0ZXJlZCBieSBvdmVyYWxsIGV4cHJlc3Npb24KCgpgYGB7ciBQbGFpbkhlYXRtYXAsIGZpZy5rZWVwPSJsYXN0IiwgZmlnLndpZHRoPTExLCBmaWcucGF0aD0nZmlndXJlcy8nLCBkZXY9YygncG5nJywgJ3BkZicpfQpjb3VudHNfcm91bmQ8LXJvdW5kKGNvdW50cy5maWx0LGRpZ2l0cz0wKQpkZHMgPC0gREVTZXFEYXRhU2V0RnJvbU1hdHJpeChjb3VudERhdGEgPSBjb3VudHNfcm91bmQsY29sRGF0YSA9IEV4cERlc2lnbixkZXNpZ24gPSBkZXNpZ24pCnJsZCA8LSB2c3QoZGRzLCBibGluZCA9IEZBTFNFLGZpdFR5cGU9J2xvY2FsJykKc2FtcGxlRGlzdHMgPC0gZGlzdCh0KGFzc2F5KHJsZCkpKQpkZiA8LSBhcy5kYXRhLmZyYW1lKGNvbERhdGEoZGRzKVssYygicGh5c2lvbG9neSIsImNvbmRpdGlvbiIsImNsYWRlIildKQpzYW1wbGVEaXN0TWF0cml4IDwtIGFzLm1hdHJpeCggc2FtcGxlRGlzdHMgKQpjb2xvcnMgPC0gY29sb3JSYW1wUGFsZXR0ZSggcmV2KGJyZXdlci5wYWwoOSwgIkJsdWVzIikpICkoMjU1KQpwaGVhdG1hcChzYW1wbGVEaXN0TWF0cml4LAogICAgICAgICBjbHVzdGVyaW5nX2Rpc3RhbmNlX3Jvd3MgPSBzYW1wbGVEaXN0cywKICAgICAgICAgY2x1c3RlcmluZ19kaXN0YW5jZV9jb2xzID0gc2FtcGxlRGlzdHMsCiAgICAgICAgIGNvbCA9IGNvbG9ycywgYW5ub3RhdGlvbiA9IGRmLCBzaG93X3Jvd25hbWVzPUYpCmBgYAoKIyMjIEluZGl2aWR1YWxzIGJ5IFRvcCAxMDAgZ2VuZXMgaGVhdG1hcAoKCgpgYGB7ciBNaW5pUGxhaW5HZW5lSGVhdG1hcCwgZWNobz1GQUxTRSwgZmlnLmtlZXA9Imxhc3QiLCBmaWcud2lkdGg9MTEsIGZpZy5wYXRoPSdmaWd1cmVzLycsIGRldj1jKCdwbmcnLCAncGRmJyl9CgpzZWxlY3QxMDAgPC0gb3JkZXIocm93TWVhbnMoY291bnRzKGRkcyxub3JtYWxpemVkPUZBTFNFKSksZGVjcmVhc2luZz1UUlVFKVsxOjEwMF0KCnBoZWF0bWFwKGFzc2F5KHJsZClbc2VsZWN0MTAwLF0sIHNob3dfcm93bmFtZXM9VCxjbHVzdGVyaW5nX2Rpc3RhbmNlX3Jvd3MgPSBzYW1wbGVEaXN0cywKICAgICAgICAgY2x1c3RlcmluZ19kaXN0YW5jZV9jb2xzID0gc2FtcGxlRGlzdHMsIGFubm90YXRpb25fY29sPWRmKQoKCmBgYAoKIyMjIEluZGl2aWR1YWxzIGNsdXN0ZXJlZCBieSB0b3AgMTAwIGdlbmUgZXhwcmVzc2lvbgoKCmBgYHtyIE1pbmlQbGFpbkhlYXRtYXAsIGVjaG89RkFMU0UsIGZpZy5rZWVwPSJsYXN0IiwgZmlnLndpZHRoPTExLCBmaWcucGF0aD0nZmlndXJlcy8nLCBkZXY9YygncG5nJywgJ3BkZicpfQoKc2VsZWN0MTAwIDwtIG9yZGVyKHJvd01lYW5zKGNvdW50cyhkZHMsbm9ybWFsaXplZD1GQUxTRSkpLGRlY3JlYXNpbmc9VFJVRSlbMToxMDBdCgpzYW1wbGVEaXN0cyA8LSBkaXN0KHQoYXNzYXkocmxkKVtzZWxlY3QxMDAsXSkpCnNhbXBsZURpc3RNYXRyaXggPC0gYXMubWF0cml4KCBzYW1wbGVEaXN0cyApCgpwaGVhdG1hcChzYW1wbGVEaXN0TWF0cml4LCBzaG93X3Jvd25hbWVzPVQsY2x1c3RlcmluZ19kaXN0YW5jZV9yb3dzID0gc2FtcGxlRGlzdHMsCiAgICAgICAgIGNsdXN0ZXJpbmdfZGlzdGFuY2VfY29scyA9IHNhbXBsZURpc3RzLCBhbm5vdGF0aW9uX2NvbD1kZikKCgpgYGAKCiMjIyBQQ0EgZm9yIG92ZXJhbGwgZXhwcmVzc2lvbgoKCmBgYHtyIHBsYWluUENBLCBmaWcua2VlcD0ibGFzdCIsIGZpZy53aWR0aD0xMSwgZmlnLnBhdGg9J2ZpZ3VyZXMvJywgZGV2PWMoJ3BuZycsICdwZGYnKX0KCgpjb3dwbG90OjpwbG90X2dyaWQoIHBsb3RQQ0EocmxkLCBpbnRncm91cD0iY29uZGl0aW9uIiksCiAgICAgICAgICAgICAgICAgICAgcGxvdFBDQShybGQsIGludGdyb3VwPSJwaHlzaW9sb2d5IiksCiAgICAgICAgICAgICAgICAgICAgcGxvdFBDQShybGQsIGludGdyb3VwPSJjbGFkZSIpLAogICAgICAgICAgICAgICAgICAgIHBsb3RQQ0EocmxkLCBpbnRncm91cD1jKCJjbGFkZSIsInBoeXNpb2xvZ3kiLCJjb25kaXRpb24iIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbj0iYyIsIG5jb2w9MikKCmBgYAoK